home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™94 / Miscellaneous / Randy Thelen / ThreadedSort / Sort ƒ / SortPicts.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-26  |  2.8 KB  |  125 lines  |  [TEXT/MMCC]

  1. /*
  2.  *    File:    SortPicts.h
  3.  *    -------------------
  4.  *    
  5.  *    
  6.  *
  7.  *
  8.  *
  9.  *
  10.  *
  11.  */
  12.  
  13. #ifndef __SortPicts__
  14. #define __SortPicts__
  15.  
  16. class    SortPicts;
  17.  
  18. #include "Window.h"
  19. #include "AppLib.h"
  20. #include <Threads.h>
  21. #include <QDOffscreen.h>
  22. #include <LowMem.h>
  23.  
  24. /*
  25.  *    QuickSort #define
  26.  */
  27. #define    kPivotCutoff    25
  28.  
  29. typedef    void    (*SortFuncPtr)( SortPicts *sortPicts);
  30. typedef    void    (*UpdateFuncPtr)( SortPicts *sortPicts);
  31.  
  32. typedef    unsigned char    SortPixel;
  33. typedef    SortPixel        *SortPixelPtr;
  34. typedef    SortPixelPtr    *SortPixelHandle;
  35.  
  36. typedef    long            SortData;
  37. typedef    SortData        *SortDataPtr;
  38. typedef SortDataPtr        *SortDataHandle;
  39.  
  40. #define    kYieldTime                    10
  41. #define    kWindPictRectVoffset        20
  42. typedef    double            _Float;
  43.  
  44. class    SortPicts : public TWindow {
  45. public:
  46.     GWorldPtr            sortGWorld;
  47.     PixMapHandle        sortPixmap;
  48.     SortPixelPtr        sortPixels;
  49.     SortDataPtr            sortData;
  50.     SortDataHandle        sortHandle;
  51.     long                N;
  52.     Rect                updateRect;
  53.     SortFuncPtr            sortFunc;
  54.     PicHandle            sortPict;
  55.     Rect                sortRect;
  56.     long                pictWidth;
  57.     long                pictHeight;
  58.     Rect                copyBitsRect;
  59.     Rect                windPictRect;
  60.     long                pictRowBytes;
  61.     WindowPtr            me;
  62.     long                randomSeed;
  63.     UpdateFuncPtr        updateFunc;
  64.     long                startTime;
  65.     long                newUnitCount;
  66.     long                unitCount;
  67.     ThreadID            threadInfo;
  68.     
  69. public:
  70.                         SortPicts();
  71.     virtual             ~SortPicts();
  72.  
  73.     virtual WindowPtr    MakeNewWindow(WindowPtr behindWindow);
  74.     virtual    void        AdjustCursor(EventRecord * anEvent);
  75.     virtual void        Activate(Boolean activating);
  76.     virtual void        Draw(void);
  77. //    virtual void        Click(EventRecord * anEvent);
  78.     virtual    void        KeyDown(EventRecord * anEvent);
  79.  
  80.     virtual void        AdjustForNewWindowSize(Rect * oldRect,Rect * newRect);
  81.  
  82.     virtual    Boolean        Close(void);
  83.     
  84.     virtual    OSErr        HandleDrag(DragTrackingMessage dragMessage,DragReference theDrag);
  85.     virtual    OSErr        HandleDrop(DragReference theDrag);
  86.  
  87.     Boolean                PrepareGWorld( ConstStr255Param pictName);
  88.     
  89.     Boolean                LoadPicture( ConstStr255Param pictName);
  90.     Boolean                MakeGWorld( void);
  91.     Boolean                AllocSortData( void);
  92.     void                MakeSortData( void);
  93.     void                UseSortData( void);
  94.     void                UnuseSortData( void);
  95.     long                Random( long num);
  96.     long                RandomPixel( void);
  97.     void                SetSortItem( long index, long data);
  98.     void                ExchangeSortItem( long one, long theOther);
  99.     void                Scramble( void);
  100.  
  101.     void                UseUpdateFunc( UpdateFuncPtr updateFunc);
  102.     void                Update( void);
  103.     void                UpdateScramble( void);
  104.     void                UpdateSortPict( void);
  105.     
  106.     void                Entry( void);
  107.     void                MakeThreaded( void);
  108.     void                Yield( void);
  109.     void                CalculateNewUnitCount( void);
  110.     
  111.     void                UseSortFunc( SortFuncPtr sortFunc);
  112.     void                Sort( void);
  113.     void                QSort( void);
  114.     void                ChooseMedian( long a, long b, long c);
  115.     void                QuickSortEngine( long left, long right);
  116. };
  117.  
  118. void    UpdateScramble( SortPicts *sortPicts);
  119. void    UpdateSortPict( SortPicts *sortPicts);
  120. void    QSort( SortPicts *sortPicts);
  121.  
  122. pascal    void    *SortPictsThreadEntry( void *there);
  123.  
  124.  
  125. #endif